package com.dareway.jvm;

import java.lang.ref.ReferenceQueue;
import java.lang.ref.SoftReference;
import java.util.ArrayList;
import java.util.List;

public class soft_reference {
    public static void main(String[] args) {
//        软引用可以和一个引用队列（ReferenceQueue）联合使用，
//        如果软引用所引用的对象被垃圾回收器回收，
//        Java虚拟机就会把这个软引用加入到与之关联的引用队列中
        ReferenceQueue<Object> queue = new ReferenceQueue<>();
        SoftReference<Object> reference = new SoftReference<>(new Object(), queue);
        System.out.println(reference);

        try{
            List<String> list = new ArrayList<>();
            while (true) list.add(new String("lbwnb"));
        }catch (Throwable t){
            System.out.println("发生了内存溢出！"+t.getMessage());
            System.out.println("软引用对象："+reference.get());
            System.out.println(queue.poll());
        }
    }
}
